﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZOVNP.Model.Abstracts
{
    /// <summary> Атрибут описания пользовательской настройки </summary>
    /// <remarks> Данный атрибут используется для задания описания настройки. Все классы пользовательских (выводимых пользователю) настроек (SkifBPSettings, OperatorSkifBPSettings и т.д.) должны быть помечены этим атрибутом </remarks>
    [AttributeUsage(AttributeTargets.Class)]
    public sealed class UserDescriptionSettingsAttribute : Attribute
    {
        /// <summary> Атрибут по-умолчанию </summary>
        public static readonly UserDescriptionSettingsAttribute Default = new UserDescriptionSettingsAttribute();
        /// <summary> строка с описанием </summary>
        private readonly string m_description;

        /// <summary> Конструктор по-умолчанию </summary>
        public UserDescriptionSettingsAttribute()
            : this("Неизвестно") { }
        /// <summary> Конструктор с описанием </summary>
        /// <param name="description"> строка с описанием </param>
        public UserDescriptionSettingsAttribute(string description)
        {
            m_description = description;
        }
        /// <summary> Проверка на равенство </summary>
        /// <param name="obj"> сравниваемый объект </param>
        /// <returns> true если описание совпадает, в противном случае - false </returns>
        public override bool Equals(object obj)
        {
            if (obj == this)
                return (true);

            UserDescriptionSettingsAttribute attribute = obj as UserDescriptionSettingsAttribute;
            return ((attribute != null) && (attribute.Description == this.Description));
        }
        /// <summary> Получить хэш-значение </summary>
        /// <returns> хэш-значение </returns>
        public override int GetHashCode() { return (this.Description.GetHashCode()); }
        /// <summary> Получить признак атрибута по-умолчанию </summary>
        /// <returns> true если нет описания, в противном случае - false </returns>
        public override bool IsDefaultAttribute() { return (this.Equals(Default)); }
        /// <summary> Получить описание </summary>
        /// <value> строка с описанием </value>
        public string Description { get { return (m_description); } }
    }
}
